查看原文
其他

机器学习预测乳腺肿瘤性质(3)——贝叶斯分类器

2017-12-09 汪君 Python爱好者社区

作者:汪君,专职数据分析,Python和R爱好者

个人微信公众号:学英文和玩数据

前面的两篇学习笔记机器学习预测乳腺肿瘤性质(1)机器学习预测乳腺肿瘤性质(2)中,我们撸了一遍SGD,logistic regression,SVM 和Random forest 的代码,今天在这个数据集上再来试试朴素贝叶斯分类器(Naive Bayesian classifier),也是有现成的函数。

在get your hands dirty之前,我们先来复习一下贝叶斯分类器的原理,看看贝叶斯公式长什么样子:

依据


我们可以得到:

其中为预测变量,这里我们理解为类别(category),下面我们假设(一个strong assumption)各个变量之间是相互独立的,即的取值只和类别有关,和其他变量无关,即


那么,上面的贝叶斯公式(1)就可以简化为这样的形式

对于已知的数据集, 的值是常数项,那么我们要关心的就只有等式左边的部分和右边部分的分母。也就是下面这样的形式:

在实际运算中,我们有给定的,已知特征和分类,现在有一个新的样本,收集到一组新的,需要预测这个新的样本应该分为哪一类(假设是二分类问题), 那我们的目标是找最大的,即寻找条件概率 的最大值。


上面这个公式说明把新的样本分到某一类的概率的大小是由右面这部分公式决定的,怎么计算这两部分的值?

的常见处理方法是用已标注的数据集中的分布来替代,或者是假设一个uniformed distribution(均等分布)。


的处理办法是假设服从某一个已知的统计分布,一般是正态分布,




利用已标注的数据集中不同类别中x变量来估计统计分布的参数(, 等)。
举例当y=0时,计算这个变量的mean和sd等参数,得到y=0时的x1的条件概率分布。

from sklearn.naive_bayes
import GaussianNB nbClf=GaussianNB()
from sklearn.model_selection import cross_val_score cross_val_score(nbClf,X=predi_features,y=diagnosis,cv=5,scoring=”accuracy”)

五折交叉验证的结果(accuracy)为

效果还不错。

朴素贝叶斯的模型其实进行了非常强的假设,比如各个X变量之间相互独立,真实情况是大部分时间X变量之间并不完全相互独立的。还有正态分布的假设,很多时候也不成立。然而这些都不妨碍朴素贝叶斯在分类方面的优良表现,尤其是在文本分类和垃圾邮件过滤的应用方面,朴素贝叶斯分类器表现相当不错。但是要注意sklean里面的朴素贝叶斯分类器predict_proba的函数预测的概率并不准确(哪位有兴趣在留言区解释原因?)。 

对比其他分类器,朴素贝叶斯还有运算速度上的优势,同时由于上面提到的独立性假设,朴素贝叶斯也不太会受到curse of dimentionality的影响。

参考资料:
1 官方文档 http://scikit-learn.org/stable/modules/naive_bayes.html

如果大家觉得这篇学习笔记有帮助,请帮我点个赞,谢谢!

获取本文数据:下图扫码关注Python爱好者公众号,后台回复 data

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存